package ai.yue.open.service.cd.controller;

import ai.yue.library.base.validation.Validator;
import ai.yue.library.base.view.Result;
import ai.yue.open.service.cd.service.DevopsService;
import cn.hutool.core.lang.Console;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONWriter;
import lombok.AllArgsConstructor;
import org.springframework.lang.Nullable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Rancher CD
 *
 * @author ylyue
 * @since 2018年11月12日
 */
@AllArgsConstructor
@RestController
@RequestMapping("/devops")
public class DevopsController {

	DevopsService devopsService;

	/**
	 * cd
	 *
	 * @param namespace    命名空间名
	 * @param workloadName 工作负载名
	 * @param imageTag     docker镜像版本（可选项）
	 */
	@PutMapping("/cd")
	public Result<?> cd(String namespace, String workloadName, @Nullable String imageTag) {
		// 1. 参数校验
		Validator.getValidatorAndSetParam(namespace).notEmpty("namespace").param(workloadName).notEmpty("workloadName");

		// 2. 打印日志
		JSONObject logInfo = new JSONObject();
		logInfo.put("namespace", namespace);
		logInfo.put("workloadName", workloadName);
		logInfo.put("imageTag", imageTag);
		Console.log("【工作负载-重新部署】请求参数：{}", logInfo.toString(JSONWriter.Feature.PrettyFormat));

		// 3. 重新部署
		return devopsService.cd(namespace, workloadName, imageTag);
	}
	
}
